/*
 * Copyright 2009 SHOP.COM
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *    http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.shop.opensocial.mediated.types;

import java.util.Date;

/**
 * Independent mediator for corresponding OpenSocial type
 *
 * @author Jordan Zimmerman
 */
public interface OrganizationMediator
{
	/**
	 * Get the address of the organization, specified as an Address. Container support for this field
	 * is OPTIONAL.
	 *
	 * @return the Address of the organization
	 */
	public AddressMediator getAddress();

	/**
	 * Get a description or notes about the person's work in the organization, specified as a string.
	 * This could be the courses taken by a student, or a more detailed description about a
	 * Organization role. Container support for this field is OPTIONAL.
	 *
	 * @return a description about the persons work in the organization
	 */
	public String getDescription();

	/**
	 * Get the date the person stopped at the organization, specified as a Date. A null date indicates
	 * that the person is still involved with the organization. Container support for this field is
	 * OPTIONAL.
	 *
	 * @return the date the person stopped at the organization
	 */
	public Date getEndDate();

	/**
	 * Get the field the organization is in, specified as a string. This could be the degree pursued
	 * if the organization is a school. Container support for this field is OPTIONAL.
	 *
	 * @return the field the organization is in
	 */
	public String getField();

	/**
	 * Get the name of the organization, specified as a string. For example, could be a school name or
	 * a job company. Container support for this field is OPTIONAL.
	 *
	 * @return the name of the organization
	 */
	public String getName();

	/**
	 * Get the salary the person receives from the organization, specified as a string. Container
	 * support for this field is OPTIONAL.
	 *
	 * @return the salary the person receives
	 */
	public String getSalary();

	/**
	 * Get the date the person started at the organization, specified as a Date. Container support for
	 * this field is OPTIONAL.
	 *
	 * @return the start date at the organization
	 */
	public Date getStartDate();

	/**
	 * Get the subfield the Organization is in, specified as a string. Container support for this
	 * field is OPTIONAL.
	 *
	 * @return the subfield the Organization is in
	 */
	public String getSubField();

	/**
	 * Get the title or role the person has in the organization, specified as a string. This could be
	 * graduate student, or software engineer. Container support for this field is OPTIONAL.
	 *
	 * @return the title or role the person has in the organization
	 */
	public String getTitle();

	/**
	 * Get a webpage related to the organization, specified as a string. Container support for this
	 * field is OPTIONAL.
	 *
	 * @return the URL of a webpage related to the organization
	 */
	public String getWebpage();

	/**
	 * Get the type of field for this instance, usually used to label the preferred function of the
	 * given contact information. The type of organization, with Canonical Values <em>job</em> and
	 * <em>school</em>.
	 *
	 * @return the type of the field
	 */
	public String getType();

	/**
	 * Get Boolean value indicating whether this instance of the Plural Field is the primary or
	 * preferred Organization.
	 *
	 * @return true if this is a primary or preferred value
	 */
	public Boolean getPrimary();
}
